In contemporary enterprises such as a corporation, one of the duties of a network administrator is to set up and maintain the corporation's computers so as to make employees more productive. Lost productivity at employees' computer desktops is a major cost for corporations, often resulting from user errors such as inadvertently removing some or all of a needed application or using an old application rather than an enterprise-specified one that is improved, secure and/or compatible with others. Similarly, lost productivity often results from user errors such as removing or modifying other software implementations such as system configuration files, dynamic link libraries (DLLs), application files and object classes (e.g., COM objects) in ways that render the computer or applications unworkable. Productivity is also lost when a desktop is too complex, such as when the desktop has too many non-essential applications and offerings thereon. Much of the expense of administering distributed personal computer networks is spent at the desktop, performing tasks such as fixing the settings or reinstalling implementations that the user has incorrectly or inadvertently modified.
At the same time, an enterprise wants certain personnel to have access to various software implementations such as applications, while wanting other applications to be available to certain users for access if needed. For example, a corporate enterprise may declare a policy specifying that everyone in the company should use a particular electronic mail program, while in addition, those in the research department should be able to load a particular spreadsheet application if needed.
However, to implement such policy decisions, administrators or the like generally need to physically visit each workstation to load (or unload) the specified programs and other software implementations, adjust various system configurations, and so forth. In addition to initially setting the computers, the administrators must hope (or regularly check) that the users do not change the settings, however users regularly make modifications, leading to lost productivity. The administrator also needs to revisit the workstations to install new versions of implementations.
Such policies cause problems when multiple users share the same computer, since a policy instituted for one user of that computer may not be compatible with the policy for another. As can be readily appreciated, installing software implementations in an enterprise is a complex task that does not fit in well with existing systems and methods. In addition, installation for non-network users may also be improved.
Moreover, applications also sometimes have patches applied thereto. Patches are generally updates (e.g. fixes) that overwrite part of an application's code, append code to an application, change or add components (such as DLLs) used by an application and/or change application-related entries in the system registry. At present, patch installation mechanisms are essentially standalone products custom-built generally as an afterthought for the applications they are patching, and are independent from the original application installation mechanism.
As a result, patch installation mechanisms do not communicate with the original application installation mechanism, and are not aware of the installed state of an application from the original application installation mechanism's perspective. This presents a number of problems. For example, if the user is required to reinstall the original application, via its original installation mechanism, the patch is not automatically reapplied. Similarly, if the user installs a portion of a number of available applications, such as two applications of a five application suite, applies a patch written for the suite, and then later installs one or more of the formerly uninstalled applications, the patch will not be applied to the newly installed applications. It is thus up to the user to recognize the need to rerun the patch installation mechanism. However, unless the user is sophisticated enough and also remembers to check the installed version number against the patched version number, the user has no way of knowing that the patch, which should be applied, has not been applied. In short, present application patching technology has many shortcomings.